import axios from 'axios'
import router from '@/router'
// 导入网页加载进度条及相应样式
import nprogress from 'nprogress'
import "nprogress/nprogress.css"
// 使用存储在store中的token
import store from '@/store'
// 统一在这里做错误的弹窗
import { Message } from 'element-ui'


// 配置基本信息
const BASE_URL = "/api"
const TIME_OUT = 50000

const service = axios.create({
    baseURL: BASE_URL,
    timeout: TIME_OUT
})

// 配置 axios请求拦截器 需要授权的 API ，必须在请求头中使用 `Authorization` 字段提供 `token` 令牌
service.interceptors.request.use(
    config => {
        // 请求时使用进度条
        nprogress.start();
        // 发送请求前带上token
        const token = store.getters.token
        // 如果有token 在请求头上添加token令牌
        if (token) {
            config.headers.Authorization = `Bearer ${token}`
        }
        return config
    })
// 在接收数据前 
service.interceptors.response.use(
    response => {
        // 关闭进度条
        nprogress.done();
        // 检查是否成功获取数据
        const { success, message } = response.data
        if (success) {
            return response.data
        } else {
            // 错误弹窗
            Message.error(message)
            // 返回 Promise错误对象
            return Promise.reject(message)
        }
    },
    error => {
        // 错误弹窗
        Message.error(error.response.data.message)
        // 如果token过期 清空token 还原状态
        if (error.response && error.response.data && error.response.data.code === 10002) {
            store.commit('userStore/REMOVE_TOKEN')
            store.commit('userStore/RESET_STATE')
            console.log(error.response);
            console.log("当前toke过期了");
            router.replace(`/login`)
        }
        return Promise.reject(error)
    }
)
export default service